#include <bits/stdc++.h>
#define endl '\n'
using namespace std;

const int TEST_CASES = 25; // 生成25个测试用例
random_device rd;
mt19937 gen(rd());

// 生成一个随机整数
int randomInt(int min, int max) {
    return uniform_int_distribution<int>(min, max)(gen);
}

// 生成测试用例
void test(int testCase, ofstream& fout) {
    int n;
    vector<int> a;

    // 根据测试用例编号生成不同难度的测试数据
    if (testCase <= 5) {
        // 简单测试用例
        n = randomInt(3, 10);
    }
    else if (testCase <= 15) {
        // 中等测试用例
        n = randomInt(10, 1000);
    }
    else {
        // 困难测试用例
        n = randomInt(1000, 200000);
    }

    // 生成序列 A
    a.resize(n);

    // 根据测试用例类型生成不同特性的数据
    if (testCase == 1) {
        // 样例1
        n = 9;
        a = { 3, 1, 4, 1, 5, 9, 2, 6, 5 };
    }
    else if (testCase == 2) {
        // 样例2
        n = 3;
        a = { 123456, 123456, 123456 };
    }
    else if (testCase == 3) {
        // 样例3
        n = 30;
        a = { 8, 3, 6, 4, 9, 6, 5, 6, 5, 6, 3, 4, 7, 3, 7, 4, 9, 8, 5, 8, 3, 6, 8, 8, 4, 5, 5, 5, 6, 5 };
    }
    else if (testCase <= 8) {
        // 一些特殊情况
        for (int i = 0; i < n; ++i) {
            if (testCase == 4) {
                // 所有元素相等
                a[i] = 5;
            }
            else if (testCase == 5) {
                // 所有元素都是1
                a[i] = 1;
            }
            else if (testCase == 6) {
                // 递增序列
                a[i] = i + 1;
            }
            else if (testCase == 7) {
                // 递减序列
                a[i] = n - i;
            }
            else {
                // 随机小值
                a[i] = randomInt(1, 10);
            }
        }
    }
    else {
        // 随机生成序列
        for (int i = 0; i < n; ++i) {
            // 根据约束条件生成1到2*10^5之间的随机数
            a[i] = randomInt(1, 200000);
        }

        // 在一些测试用例中，增加满足条件的对数
        if (testCase >= 20) {
            // 在一些位置上设置特殊值，使得j-i=A_i+A_j成立
            int pairs = randomInt(5, min(20, n / 2));
            for (int p = 0; p < pairs; ++p) {
                int i = randomInt(1, n - 2);
                int j = randomInt(i + 1, n - 1);
                int diff = j - i;
                // 确保A_i和A_j的和等于j-i
                int sum = diff;
                if (sum <= 2) {
                    // 避免无效值
                    continue;
                }
                // 随机分配和
                a[i] = randomInt(1, sum - 1);
                a[j] = sum - a[i];
            }
        }
    }

    // 输出测试数据
    fout << n << endl;
    for (int i = 0; i < n; ++i) {
        fout << a[i];
        if (i < n - 1) fout << " ";
    }
    fout << endl;
}

void mk_in() {
    // 创建testdata目录（如果不存在）
    if (system("mkdir -p testdata") != 0) {
        cerr << "创建testdata目录失败" << endl;
        return;
    }

    for (int i = 1; i <= TEST_CASES; ++i) {
        string in_name = "testdata/" + to_string(i) + ".in";
        ofstream fout(in_name);
        test(i, fout);
        fout.close();
        cout << "生成【" << i << ".in】数据成功\n";
    }
}

void mk_out() {
    for (int i = 1; i <= TEST_CASES; ++i) {
        string in_name = "testdata/" + to_string(i) + ".in";
        string out_name = "testdata/" + to_string(i) + ".out";
        string cmd = "./std < " + in_name + " > " + out_name;
        if (system(cmd.c_str()) != 0) {
            cerr << "生成【" << i << ".out】数据失败\n";
            return;
        }
        cout << "生成【" << i << ".out】数据成功\n";
    }
}

int main() {
    // 编译标准程序
    if (system("g++ std.cpp -o std -std=c++17") != 0) {
        cerr << "编译标准程序失败" << endl;
        return 1;
    }

    mk_in();
    mk_out();
    return 0;
}